package org.groupg.demo.eclipse;

import org.eclipse.collections.api.list.MutableList;
import org.eclipse.collections.impl.factory.Lists;

/**
 * 有锁线程安全集合示例（使用内置同步机制）
 * <p>
 * 特点：
 * 1. 通过synchronized关键字实现线程安全
 * 2. 保证多线程操作的数据一致性
 * 3. 高并发场景下性能较低（线程阻塞等待锁）
 * 4. 适合并发量中等或临界区操作快的场景
 */
public class SynchronizedCollectionsExample {
    // 使用asSynchronized()创建同步包装的集合
    private static final MutableList<Integer> sharedList =
            Lists.mutable.<Integer>empty().asSynchronized(); // 所有操作使用同一把锁

    public static void main(String[] args) throws InterruptedException {
        Runnable task = () -> {
            for (int i = 0; i < 1000; i++) {
                // 线程安全操作：内部使用synchronized同步
                sharedList.add(i);
            }
        };

        Thread t1 = new Thread(task);
        Thread t2 = new Thread(task);

        t1.start();
        t2.start();
        t1.join();
        t2.join();

        // 结果应为精确的2000
        System.out.println("同步List大小: " + sharedList.size() + " | 预期值: 2000");

        // 同步集合上的批量操作示例
        synchronized (sharedList) { // 手动同步保证复合操作原子性
            if (!sharedList.isEmpty()) {
                Integer first = sharedList.getFirst();
                sharedList.remove(first);
            }
        }
    }
}